//== SAGITTARIUS ============================================================================

//== FILEDOC =========================================================================

/** @file llvm_interf.h
  * @brief llvm_interf
  */

//== BEGINNING OF CODE ===============================================================

#ifndef __SAGUTTARUIS__LLVM_INTERF__H_
#define __SAGUTTARUIS__LLVM_INTERF__H_

//== INCLUDES ========================================================================

#include "sagittarius/core/SagittariusCore.h"

#ifdef __cplusplus

//LLVM
#include "llvm/Support/DataTypes.h"
#include "llvm/DerivedTypes.h"
#include "llvm/IRBuilder.h"
#include "llvm/LLVMContext.h"
#include "llvm/Module.h"
#include "llvm/Analysis/Verifier.h"

#include "llvm/ExecutionEngine/ExecutionEngine.h"
#include "llvm/ExecutionEngine/JIT.h"
#include "llvm/ExecutionEngine/GenericValue.h"
#include "llvm/Support/TargetSelect.h"
#include "llvm/Support/raw_os_ostream.h"


namespace Sagittarius {
    
    class LLVM_Interface {
        public:
            llvm::ExecutionEngine* getee() { return _ee; }
            
            void setee(llvm::ExecutionEngine* ee) { _ee = ee; }
            
        protected:
            llvm::ExecutionEngine* _ee;
    };
    
    extern LLVM_Interface* llvmi;
    
    
}
#endif

#endif
